跳到主要内容

NC1 大数加法

https://www.nowcoder.com/practice/11ae12e8c6fe48f883cad618c2e81475

最开始看到这题,不就类型转换吗?直接调包

func solve( s string ,  t string ) string {
a, _ := strconv.Atoi(s)
b, _ := strconv.Atoi(t)
return strconv.Itoa(a + b)
}

结果发现 AC 不过

用例输入 "9","99999999999999999999999999999999999999999999999999999999999994"

所以是无法直接转成 int 类型相加的,因此需要自己模拟加法

func solve(num1 string, num2 string) string {
result := ""
add := 0 // 进位的数值(最大为 1)
cur := 0 // 当前进位(进位后余下的值)
i, j := len(num1)-1, len(num2)-1 // 记录所在位的指针(因为是从末尾开始计数,所以要使用双指针)

// 每次循环处理一位
for i >= 0 || j >= 0 || add != 0 {
// 计算当前位
if i < 0 && j >= 0 { // num1 已经加完了,num2 还有
cur = int(num2[j] - '0') + add
} else if j < 0 && i >= 0 { // 与上面的情况相反
cur = int(num1[i] - '0') + add
} else if i < 0 && j < 0 { // 都算完了
cur = add
} else { // 都还没有算完
cur = int(num1[i] - '0' + num2[j] - '0') + add
}

if cur > 9 {
add = cur / 10
cur -= 10
} else {
add = 0
}

result = string(cur + '0') + result
i--
j--
}
return result
}